\chapter{Diagrammes}


\section{Diagramme de composants}
\begin{center}
\includegraphics[scale=0.70]{diagramme_composants}
\end{center}

\subsection{Présentation des composants}

\paragraph*{}

Le schéma précédent présente l'architecture générale de la plateforme.
Celle-ci est divisée en plusieurs composants :\\

\begin{itemize}

\item \textbf{Le core} est l'élément central de l'application. Il a pour rôle de gérer la base de donnée interne et la \textit{warehouse}. En conséquence, il est le seul à y avoir accès. Toute requête de lecture ou d'écriture par un autre composant est effectuée par l'intermédiaire d'une API. Celle-ci sera l'interface de dialogue avec le \textit{core}.
\item \textbf{Les APIs} sont le seul lien que l'utilisateur final peut avoir avec le système SPASS, que ce soit pour développer ses propres \textit{plugins} de commande, de tests ou bien encore sa propre interface utilisateur.
\item \textbf{Les plugins} permettent d'étendre les possibilités de SPASS, typiquement un \textit{plugin} est un répertoire qui doit contenir un certain nombre de fichiers. L'API est la principale ressource que l'utilisateur final utilisera pour développer ses propres \textit{plugins}.
\item \textbf{Les interfaces utilisateurs} sont le lien entre l'utilisateur final et le \textit{core}, SPASS ne fournit aucune autre interface que la ligne de commande, encore une fois ici, les APIs sont les principales ressources pour développer une interface utilisateur personnalisée.

\end{itemize}

\subsection{Explications}

\paragraph*{}

Le core est un composant inerte. Il a comme seul rôle de gérer les composants internes de stockage (la base de données interne et la \textit{warehouse}). Le \textit{core} peut être atteinds via l'interface utilisateur au travers d'une API. Celle-ci permet à la dite interface d'effectuer des appels à des routines du \textit{core} qui permettront d'effectuer des opérations sur les composants internes de stockage.

\paragraph*{}

Un des besoins non fonctionnels prédominant dans ce logiciel réside dans le fait qu'il doit être possible de brancher de nouvelles interfaces utilisateurs à la plate-forme. De ce fait, il est important d'assurer une totale indépendance entre le cœur du logiciel et ses interfaces. De plus, il est important de préserver l'intégrité des composants internes de stockage (aspect sécuritaire). 

Pour répondre à ces critères, nous avons choisi de rendre inaccessible de manière directe ces composants depuis les interfaces. Seul le core y aura accès. Néanmoins, il est nécessaire aux dites interfaces de pouvoir effectuer des accès (lecture ou écriture) sur ces composants de stockage. C'est pourquoi nous avons décidé d'intégrer une API de dialogue avec le \textit{core} pour ces opérations.
Ce mécanisme est similaire au principe des appels systèmes dans un système d'exploitation. En effet, les accès au matériel sont faits par le noyau lors d'un appel système et non directement par les applications utilisateurs.
Dans SPASS, les accès aux composants internes de stockage seront effectués par le \textit{core} lors de l'appel d'une fonction de notre API par une interface.

\paragraph*{}

La gestion des droits utilisateurs est relative à la plate-forme web. En effet, le \textit{core} ne possède pas de système de droits. Ainsi, la plate-forme web a besoin de sa propre base de données (base de données externe) pour gérer ce mécanisme. Nous avons donc choisi d'utiliser directement la base de données fournie par le serveur \textit{Django} afin de lui permettre de gérer directement un système de droits.


\newpage
\section{Diagrammes d'états}
Le diagramme d'état ci dessous permet de visualiser la soumission d'un projet:
\begin{center}
\includegraphics[scale=0.60]{diagramme_etat_1}
\end{center}

Le diagramme d'état ci dessous permet de visualiser la procédure de test d'un projet:
\begin{center}
\includegraphics[scale=0.60]{diagramme_etat_2}
\end{center}

\newpage
\section{Diagramme de séquence}
\begin{center}
\includegraphics[scale=0.70]{diagramme_sequence}
\end{center}

\newpage
\section{Diagramme de cas}
\begin{center}
\includegraphics[scale=0.65]{diagramme_cas}
\end{center}
